package com.shop.model.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

public class FtpUtil{

    //ftp对象
    private static FTPClient ftp;
    //
    private static FTPFile ftpFileile;

    //需要连接到的ftp端的ip
    private String ip="111.230.149.26";
    //连接端口，默认21
    private int port=21;
    //要连接到的ftp端的名字
    private String name="xieanjian";
    //要连接到的ftp端的对应得密码
    private String pwd="xieanjian";

    //调用此方法，。连接到ftp对象，并验证登录进入fto
    public FtpUtil() {
        ftp = new FTPClient();
        //验证登录
        try {
            ftp.connect(ip, port);
            System.out.println(ftp.login(name, pwd));
            ftp.setCharset(Charset.forName("UTF-8"));
            ftp.setControlEncoding("UTF-8");
            System.out.println("链接成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    //TODO删除文件
    // 删除文件 FTP通用方法
    public static void deleteFileFtp(){
        try {
            ftp.cwd("");// path为FTP服务器上保存上传文件的路径。
            try {
                ftp.deleteFile("zhuye.html");
            } catch (Exception e) {
                System.out.println("删除文件失败！请检查系统FTP设置,并确认FTP服务启动");
            }
//            ftp.closeServer();
        } catch (Exception e) {
            System.out.println("删除文件失败！");
        }
    }


    //获取ftp某一文件（路径）下的文件名字,用于查看文件列表
//    public void getFilesName() {
//        StringBuffer buffer = new StringBuffer();
//        try {
//            //获取ftp里面，“Windows”文件夹里面的文件名字，存入数组中
//            FTPFile[] files = ftp.listFiles("");
//            //打印出ftp里面，“Windows”文件夹里面的文件名字
//            for (int i = 0; i < files.length; i++) {
//                System.out.println(files[i].getName());
//            }
//        } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
//    }



    //上传文件，优化了传输速度，传入一个文件流，以及保存文件名字,返回一个文件的保存路径
    public String putFile(FileInputStream fileInputStream,String fileName) {
        try {
            OutputStream os = ftp.storeFileStream("images/"+fileName);
            FileInputStream fis = fileInputStream;

            byte[] b = new byte[1024];
            int len = 0;
            while ((len = fis.read(b)) != -1) {
//                System.out.println(b);
//                System.out.println(len);
                os.write(b,0,len);
            }
            fis.close();
            os.flush();
            os.close();
        } catch (IOException e) {
            System.out.println("输出失败");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("上传成功");
        return "ftp://111.230.149.26/images/"+fileName;
    }

    //下载文件的第二种方法，优化了传输速度
    public void getFile() {
        try {
            InputStream is = ftp.retrieveFileStream("zhuye.html");
            System.out.println("读取成功");
            FileOutputStream fos = new FileOutputStream(new File("D:/zhuye.html"));

            byte[] b = new byte[1024];
            int len = 0;
            while ((len = is.read(b)) != -1) {
                fos.write(b,0,len);
            }
            System.out.println("输出成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
